package com.smart.community.feign.property.dto;

import io.swagger.v3.oas.annotations.media.Schema;

import java.io.Serializable;
import java.util.List;

/**
 * 物业公司数据权限范围VO
 * 
 * 包含物业公司人员可访问的所有层级数据ID集合
 * 
 * @author Wu.Liang
 * @version 1.0.0
 * @since 2025-01-30
 */
@Schema(description = "物业公司数据权限范围VO")
public class PropertyCompanyDataScopeVO implements Serializable {
    
    private static final long serialVersionUID = 1L;
    
    /**
     * 用户ID
     */
    @Schema(description = "用户ID")
    private Long userId;
    
    /**
     * 物业公司ID
     */
    @Schema(description = "物业公司ID")
    private Long propertyCompanyId;
    
    /**
     * 是否为超级管理员
     */
    @Schema(description = "是否为超级管理员")
    private Boolean isSuperAdmin;
    
    /**
     * 是否有关联物业公司
     */
    @Schema(description = "是否有关联物业公司")
    private Boolean hasPropertyCompany;
    
    /**
     * 可访问的社区ID集合
     */
    @Schema(description = "可访问的社区ID集合")
    private List<Long> communityIds;
    
    /**
     * 可访问的楼栋ID集合
     */
    @Schema(description = "可访问的楼栋ID集合")
    private List<Long> buildingIds;
    
    /**
     * 可访问的单元ID集合
     */
    @Schema(description = "可访问的单元ID集合")
    private List<Long> unitIds;
    
    /**
     * 可访问的房户ID集合
     */
    @Schema(description = "可访问的房户ID集合")
    private List<Long> householdIds;
    
    /**
     * 可访问的用户ID集合
     */
    @Schema(description = "可访问的用户ID集合")
    private List<Long> userIds;
    
    /**
     * 数据权限描述
     */
    @Schema(description = "数据权限描述")
    private String description;
    
    public PropertyCompanyDataScopeVO() {
    }
    
    public PropertyCompanyDataScopeVO(Long userId, Long propertyCompanyId, Boolean isSuperAdmin, Boolean hasPropertyCompany) {
        this.userId = userId;
        this.propertyCompanyId = propertyCompanyId;
        this.isSuperAdmin = isSuperAdmin;
        this.hasPropertyCompany = hasPropertyCompany;
    }
    
    // Getter and Setter methods
    public Long getUserId() {
        return userId;
    }
    
    public void setUserId(Long userId) {
        this.userId = userId;
    }
    
    public Long getPropertyCompanyId() {
        return propertyCompanyId;
    }
    
    public void setPropertyCompanyId(Long propertyCompanyId) {
        this.propertyCompanyId = propertyCompanyId;
    }
    
    public Boolean getIsSuperAdmin() {
        return isSuperAdmin;
    }
    
    public void setIsSuperAdmin(Boolean isSuperAdmin) {
        this.isSuperAdmin = isSuperAdmin;
    }
    
    public Boolean getHasPropertyCompany() {
        return hasPropertyCompany;
    }
    
    public void setHasPropertyCompany(Boolean hasPropertyCompany) {
        this.hasPropertyCompany = hasPropertyCompany;
    }
    
    public List<Long> getCommunityIds() {
        return communityIds;
    }
    
    public void setCommunityIds(List<Long> communityIds) {
        this.communityIds = communityIds;
    }
    
    public List<Long> getBuildingIds() {
        return buildingIds;
    }
    
    public void setBuildingIds(List<Long> buildingIds) {
        this.buildingIds = buildingIds;
    }
    
    public List<Long> getUnitIds() {
        return unitIds;
    }
    
    public void setUnitIds(List<Long> unitIds) {
        this.unitIds = unitIds;
    }
    
    public List<Long> getHouseholdIds() {
        return householdIds;
    }
    
    public void setHouseholdIds(List<Long> householdIds) {
        this.householdIds = householdIds;
    }
    
    public List<Long> getUserIds() {
        return userIds;
    }
    
    public void setUserIds(List<Long> userIds) {
        this.userIds = userIds;
    }
    
    public String getDescription() {
        return description;
    }
    
    public void setDescription(String description) {
        this.description = description;
    }
    
    @Override
    public String toString() {
        return "PropertyCompanyDataScopeVO{" +
                "userId=" + userId +
                ", propertyCompanyId=" + propertyCompanyId +
                ", isSuperAdmin=" + isSuperAdmin +
                ", hasPropertyCompany=" + hasPropertyCompany +
                ", communityIds=" + (communityIds != null ? communityIds.size() : 0) + " items" +
                ", buildingIds=" + (buildingIds != null ? buildingIds.size() : 0) + " items" +
                ", unitIds=" + (unitIds != null ? unitIds.size() : 0) + " items" +
                ", householdIds=" + (householdIds != null ? householdIds.size() : 0) + " items" +
                ", userIds=" + (userIds != null ? userIds.size() : 0) + " items" +
                ", description='" + description + '\'' +
                '}';
    }
} 